#include "instantane_du_piano.h"
#include <iostream>

type_octet remplisseur::operator()() {
	type_octet ret = 0;
	for(int i=0, position = octet_actuel_ * 8; 
		position < instantane_du_piano::nombre_de_touches && i<8; 
		++i, ++position)
		if(inst_[position])
			ret |= 1 << i;
	
	++octet_actuel_;
	return ret;
}

void initialiseur::operator()(type_octet o) {
	for(int i=0, position = octet_actuel_ * 8; 
		position < instantane_du_piano::nombre_de_touches && i<8; 
		++i, ++position)
		inst_[position] = (((o >> i) & 1) == 1);
	++octet_actuel_;
}

// À supprimer un jour (avec la référence dans le .h)
std::ostream &operator<<(std::ostream &flux, instantane_du_piano& ins) {
	flux << "(" << ins.timestamp() << ") ";
	for(int i=0; i<instantane_du_piano::nombre_de_touches; i++)
		flux << (ins[i] ? '1':'0');
	return flux;
}
